﻿using System;

namespace SeoulOpenApi.Park
{
    /// <summary>
    /// 서울시 Open API 서울 공원 정보
    /// </summary>        
    public class ParkService : REST_BaseService
    {
        /// <summary>
		/// 서울시 API 서비스
		/// </summary>
		public ParkService() : this(null, null) { } 

        /// <summary>
		/// 서울시 API 서비스
		/// </summary>
		/// <param name="userId">서울시 API접속 ID</param>
		/// <param name="authKey">서울시로부터 발급받은 인증키</param>
		/// <remarks>인증키 발급: http://mobile.openapi.seoul.go.kr/ </remarks>
		public ParkService(string userId, string authKey)
		{
			base.UserID = userId;
			base.AuthKey = authKey;
		}

        /// <summary>
        /// 서비스 항목에 따라 데이터 가져오기
        /// </summary>
        /// <param name="name">서비스명</param>
        /// <returns></returns>
        protected override REST_Data getREST_Data(string name)
        {
            REST_Data rest = new REST_Data();
            switch (name)
            {
                case "ListParksInfo":
                    rest.Name = "ListParksInfo";
                    rest.Description = "공원정보 정보조회";
                    rest.Address = ApiUrlPrefix + "ListParksInfo.do?"+
                        "uk="+ base.AuthKey + //변수 : 인증키[필수]
                        "&uid="+base.UserID + //변수 : 회원아이디[필수]
                        "&frnum={0}" + //변수 : 총건수중 시작건수 [필수]
                        "&tonum={1}" + //변수 : 총건수중 종료건수 [필수]
                        "&aname={2}" + //변수 : 주소
                        "&sname={3}" + //변수 : 공원명
                        "&p_idx={4}"; //변수 : 공원번호
                    break;

                case "ListParksInfoCnt":
                    rest.Name = "ListParksInfoCnt";
                    rest.Description = "공원정보 총 건수 조회";
                    rest.Address = ApiUrlPrefix + "ListParksInfoCnt.do?" +
                        "uk="+base.AuthKey + //변수 : 인증키[필수]
                        "&uid="+base.UserID + //변수 : 회원아이디[필수]
                        "&aname={0}" + //변수 : 주소
                        "&sname={1}" + //변수 : 공원명
                        "&p_idx={2}"; //변수 : 공원번호
                    break;

                case "ListParksPrgInfo":
                    rest.Name = "ListParksPrgInfo";
                    rest.Description = "공원 프로그램 정보 정보조회";
                    rest.Address = ApiUrlPrefix + "ListParksPrgInfo.do?" +
                        "uk=" + base.AuthKey + //변수 : 인증키[필수]
                        "&uid=" + base.UserID + //변수 : 회원아이디[필수]
                        "&frnum={0}" + //변수 : 총건수중 시작건수[필수]
                        "&tonum={1}" + //변수 : 총건수중 종료건수[필수]
                        "&aname={2}" + //변수 : 주소
                        "&sname={3}" + //변수 : 공원명
                        "&g_idx={4}" + //변수 : 프로그램번호
                        "&p_idx={5}" + //변수 : 공원번호
                        "&pname={6}"; //변수 : 프로그램명
                    break;

                case "ListParksPrgInfoCnt":
                    rest.Name = "ListParksPrgInfoCnt";
                    rest.Description = "공원 프로그램 총 건수 조회";
                    rest.Address = ApiUrlPrefix + "ListParksPrgInfoCnt.do?" +
                        "uk=" + base.AuthKey + //변수 : 인증키[필수]
                        "&uid=" + base.UserID + //변수 : 회원아이디[필수]
                        "&aname={0}" + //변수 : 주소
                        "&sname={1}" + //변수 : 공원명
                        "&g_idx={2}" + //변수 : 프로그램번호
                        "&p_idx={3}" + //변수 : 공원번호
                        "&pname={4}"; //변수 : 프로그램명
                    break;
            }

            // 해당 서비스가 없는 경우
            if (String.IsNullOrEmpty(rest.Name))
                throw new Exception(name + " not found.");
            
            return rest;
        }
    }
}
